MS-DOS COM形式
実行可能ファイルの形式としては最もシンプルなもので、実行時のメモリイメージがそのままファイルになっている。セグメントレジスタは触らないものとしてバイナリを生成している。したがってメモリ領域は最大でも16ibtで扱える64KBまで(厳密には65279バイト)となる。 そもそもMS-DOSはシングルタスクOSで、動作しているプログラムは最後に起動されたもの1つのみという特性があった。スケジューラを搭載していないので、以前使ったプログラムはメモリにはあるが動かないという状態である。そしてプログラムが終了すると親プログラムに処理が戻る、という構造になっている。
ロード手順
メモリにPSP(プログラム・セグメント・プリフィックス)256B+ファイルサイズ+スタック256Bの領域を確保
PSPが256Bなのでちょうど0x0100番地からファイルをロード
すべてのセグメントレジスタを0番地に設定
code:hello.asm
1 ;------------------------------------
2 ; サンプルプログラム HELLOC.ASM
3 ; 「Hello !」と表示します .
4 ; COM 形式版
5 ;------------------------------------
6 ASSUME CS:CSEG, DS:CSEG
7 CSEG SEGMENT
8 ORG 100h ;PSP(MS-DOSが勝手に使う領域)を無視
9 MOV DX, OFFSET MSG ; ここがプログラムの開始点
10 MOV AH, 9h
11 INT 21h
12 MOV AX, 4C00h
13 INT 21h
14 MSG DB Hello !', 0Dh, 0Ah, '$'
15 CSEG ENDS
16 END
余談
この形式のプログラムはCascadeに感染する。
https://www.youtube.com/watch?v=z7g-v3d7-Gk&feature=youtu.be